package cn.netuo.bumbersoll.receiver;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.text.TextUtils;

import com.rooten.Constant;
import com.tencent.bugly.beta.Beta;

import cn.netuo.bumbersoll.App;
import cn.netuo.bumbersoll.BizConstant;
import cn.netuo.bumbersoll.PermissionActivity;
import cn.netuo.bumbersoll.helper.MqttFromCHelper;
import cn.netuo.bumbersoll.helper.ble.BLEHelper;
import cn.netuo.bumbersoll.util.BsUtil;
import lib.grasp.util.AppUtil;
import lib.grasp.util.L;

/**
 * Created by JS_grasp on 2019/1/18.
 */
public class SysReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
        String action = intent.getAction();
        if(TextUtils.isEmpty(action)) return;
        L.logOnly("action:" + action);

        switch (action){
            case Constant.ARG_BROADCAST_LOOP: {                 // 远程服务守护广播()
                doRestartAppIfNeed(context);                    // 保活
                doCheckMqttSAndLightScreen(context);            // 检查mqtt连接状态
                doPowerOffIfNeed(context);                      // 检查是否有需要断电的任务
                doQuerySelfBattery(context);                    // 询问自己剩余电量
                break;
            }

            case BizConstant.BROAD_BOOT_COMPLETED: {            // 开机完成广播
                doRestartAppIfNeed(context);                    // 启动APP
                break;
            }

            case BizConstant.BROAD_HEARTBEAT: {                 // 心跳广播
                doLocate(context);                              // 请求定位, 心跳
                doHeartBeat(context);                           // 发心跳-(需联网) // 心跳的时候最好可以带上各种版本号
                doTestNewPatch();                               // 检查新补丁-(需联网)
                break;
            }
        }
    }

    /** 检查mqtt连接状态并且检查是否需要亮屏 */
    private void doCheckMqttSAndLightScreen(Context context) {
        App.getApp().getLocalBroadMgr().broadAction(BizConstant.BROAD_MQTT_STATE);
    }

    /** 判断是否有必要给谁断电 */
    private void doPowerOffIfNeed(Context context){
        if(BizConstant.IS_NOW_IN_LOWPOWER_MODE) return;
        BLEHelper helper = App.getApp().getBLEHelper();
        if(helper == null)return;
        helper.checkUsbOffTask();
    }

    /** (每0.5分钟)保证app运行,并按配置控制是否在前台 */
    private void doRestartAppIfNeed(Context context){
        if (!AppUtil.isAppRunning(context, App.getApp().getPackageName())) {
            Intent intent1 = new Intent(context, PermissionActivity.class);
            intent1.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            context.startActivity(intent1);
            return;
        }
        if(BizConstant.IS_KEEP_FRONT) AppUtil.setTopApp(context);   // 返回前台
    }

    /** (每30分钟)询问手机自身剩余电量 */
    private void doQuerySelfBattery(Context context){
        // 当手机电量低于阈值时,上报服务(停止服务),进入节电模式
        // 当手机电量高于阈值时,上报服务(开始服务),退出节电模式
        float rate = App.getApp().getBatteryReceiver().getBatteryLeftRate(context);
        BsUtil.doOnPadPower(context, rate);
    }

    /** 重新定位 */
    private void doLocate(Context context){
        if(BizConstant.IS_NOW_IN_LOWPOWER_MODE) return;
        App.getApp().getLocalBroadMgr().broadAction(BizConstant.BROAD_LOCATE);
    }

    /** 业务心跳(低电也要发) */
    private void doHeartBeat(Context context){
        App.getApp().getLocalBroadMgr().broadAction(BizConstant.BROAD_BIZ_HEARTBEAT);
    }

    /** (每30分钟)测试是否有新的补丁包了 */
    private void doTestNewPatch(){
        if(BizConstant.IS_NOW_IN_LOWPOWER_MODE) return;
        Beta.checkUpgrade(false, false);
    }

}